【MediaPipe】Poseを動かしてみた(v0.7.9)
カフェチームの山本です。
先日、MediaPipeがアップデートされ、v0.7.9が公開されました。
Release MediaPipe Pose · google/mediapipe
今回は、この変更で追加されたPoseという骨格検出を動かしてみたいと思います。
(今まで投稿したMediaPipe関連記事はこちらにまとめてあります。)
Poseの動かし方
今回はAndroidのAPK版とWeb版で動かしました。Android版はこちらのページの「Example Apps」「Mobile」「Android target」の項目に、APKへのリンクがありますので、そこからダウンロードして使用できます。Web版はVisualizerのページに飛んで、右上の非常口のピクトグラムのようなボタンを押すと実行できます。(どちらもとても簡単ですね)
WSLやUbuntuから動かしたい場合は、今までと同様にビルドと実行のコマンドを打つことで実行できると思われます。コマンドとしては以下のようになると思われます(未確認)。入出力ファイルへのパスは適宜変更してください。
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 \ ediapipe/examples/desktop/upper_body_pose_tracking:upper_body_pose_tracking_gpu
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/upper_body_pose_tracking/upper_body_pose_tracking_gpu \ --calculator_graph_config_file=mediapipe/graphs/pose_tracking/upper_body_pose_tracking_gpu.pbtxt \ --input_video_path="/mnt/c/Users/yamamoto.hiroki/Pictures/Camera Roll/sample.mp4" \ --output_video_path="/mnt/c/Users/yamamoto.hiroki/Pictures/Camera Roll/output.mp4"
GPUではなくCPUで動かす場合には、2つのコマンドの「upper_body_pose_tracking_gpu」を「upper_body_pose_tracking_cpu」に変更すれば良いはずです。
Poseの処理の様子
Web版での処理の様子は下の動画のようでした。(他のプログラムでもそうだったのですが)Web版だと画面が定期的に揺れるのですが、通常のプログラムでは問題ありません。
どちらも2人が横に並んでも、処理結果を描画するのは1人まででした。ネットワーク図を見ての推測ですが、検出自体は複数人していて、描画のみ1人になっているように思われます。
正面からの検出
結果は以下のようでした。基本的には、体の正面・後ろのどこからでも検出ができていました。ただ、00:30~のように、体を横にした状態で手を前に出すと、すこし検出が悪くなりました。また、マスクをしているからかも知れませんが、目の検出位置が実際よりも下に出ることが多かったです。
上からの検出
真上からでは難しいですが、ある程度角度がついて体が見えている状態では、比較的安定して検出ができました。ただし、手を前に出したり、中腰になると検出が悪くなりました。
Poseの内容
利用されているモデル
CVPR2020で発表されたBlazePoseを軽量化したモデルが利用されているようです。BlazePose自体は全身の骨格を検出できますが、MediaPipeでは上半身のみを検出するモデルになっていると書かれています。
On-device, Real-time Body Pose Tracking with MediaPipe BlazePose
まとめ
MediaPipeがアップデートされ、v0.7.9が公開されました。ここで追加されたPose(上半身の骨格検出)を動かして、検出の様子を確認しました。
参考にさせていただいたページ
On-device, Real-time Body Pose Tracking with MediaPipe BlazePose
補足
v0.7.9でPythonでのビルド方法が追加されました。
https://google.github.io/mediapipe/getting_started/building_examples.html#python
ドキュメントを見る限り、簡単にインストールして使えそうなので、そのうち動かしてみたいと思います。